﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using FrbaCommerce.Registro_de_Usuario;

namespace FrbaCommerce.Abm_Cliente
{
    public partial class AbmCliente : Form
    {
        Cliente cliente;
        Usuario user;
        RegistrarUsuario parentForm;

        /* Los datos de cliente, se cargan a partir de un registro de usuario o bien,
         si el usuario no existe, hay que crear uno generico */

        public AbmCliente(Cliente cliente, RegistrarUsuario registrarUsuarioForm)
        {
            InitializeComponent();
            this.cliente = cliente;
            this.CargarTipo();
            this.user = registrarUsuarioForm.getUsuario();
            this.parentForm = registrarUsuarioForm;
            if (this.cliente.id != 0)
                CargarCliente();
        }

        public AbmCliente(Cliente cliente, Usuario usuario)
        {
            InitializeComponent();
            this.cliente = cliente;
            this.CargarTipo();
            this.user = usuario;
            if (this.cliente.id != 0)
                CargarCliente();
        }


        public AbmCliente(Cliente cliente) 
        {
            InitializeComponent();
            this.cliente = cliente;
            this.CargarTipo();
            this.user = new Usuario();
            this.user.userName = "";
            if (this.cliente.id != 0)
                CargarCliente();
        }
        
        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (verificacionDatos())
            {
                this.LLenarCliente();
                if (Cargar_Tel_Y_Direccion(this.cliente))
                {
                    if (this.cliente.id == 0)
                    {
                        /*GUARDO EL USUARIO x defecto*/
                       if (this.user.userName.Length == 0)
                       {
                            this.user.userName = cliente.Documento.ToString();
                            this.user.guardarUsuarioClienteDefault();
                       }

                       /*HAY USUARIO POR REGISTRAR*/
                       else 
                       {
                            this.user.guardar();
                            this.user.updateUltimoLogin();
                       }

                        this.cliente.Habilitado = true;
                        this.cliente.FechaNacimiento = this.dateTimePicker1.Value;
                        this.cliente.id_user = this.user.Id;
                        cliente.Guardar(this.cliente);
                        MessageBox.Show("Los datos han sido ingresados al sistema.", "Confirmacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                    else
                    {
                        this.cliente.Modificar(this.cliente);
                        MessageBox.Show("Los datos han sido ingresados al sistema.", "Confirmacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                }               
            }               
        }

        private bool verificacionDatos()
        {
            string mensaje = ValidarCamposObligatorios();
            DateTime fecha = new DateTime();
            FuncionesComunes funciones = new FuncionesComunes();

            if (mensaje.Length != 0)
            {
                 MessageBox.Show("El/los siguientes campos son obligatorios.\n" + mensaje, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                 return false;
            }
            else if (txtMail.Text.Length != 0 && !funciones.validacionMail(txtMail.Text))
            {
                MessageBox.Show("El email no es válido.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            //else if (!funciones.validacionFecha(txtFechaDeNacimiento.Text, out fecha))
            else if (!funciones.validacionFecha(dateTimePicker1.Value.ToString(), out fecha))
            {
                MessageBox.Show("La fecha es inválida.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            else if (this.cliente.id != 0)
            {
                if (txtDni.Text != this.cliente.Documento.ToString())
                {
                    if (!cliente.VerificarDocumento(Convert.ToInt32(txtDni.Text)))
                    {
                        MessageBox.Show("El documento ingresado ya esta en el sistema.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return false;
                    }
                    else
                        return true;
                }
                else
                {
                    return true; 
                }
            }
            else
            {
                if (!cliente.VerificarDocumento(Convert.ToInt32(txtDni.Text)))//(this.cliente.Documento))
                {
                    MessageBox.Show("El documento ingresado ya esta en el sistema.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
                else
                    return true;            
            }
        }
        private void CargarTipo()
        {
            TipoDocumento tipo = new TipoDocumento();
            tipo.cargarCombo(cmbTipo);        
        }        

        private bool Cargar_Tel_Y_Direccion(Cliente cliente)
        {
            if (this.cliente.tel.id == ""|| this.cliente.tel.id == null)
            {
                if (!this.cliente.tel.Guardar(this.cliente.tel))
                {                     
                    MessageBox.Show("El telefono ingresado ya esta en el sistema.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;                
                }
            }
            else
            {
                if (String.Compare(txtTelefono.Text, this.cliente.tel.numero) != 0)
                {
                    if (!cliente.tel.VerificarTelefono(this.cliente.tel.numero))
                    {
                        MessageBox.Show("El telefono ingresado ya esta en el sistema.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return false;

                    }
                    else
                    {
                        this.cliente.tel.Modificar(this.cliente.tel);
                        return true;
                    }
                }
                else
                {
                    this.cliente.tel.Modificar(this.cliente.tel);
                    return true;
                }
                
            }
            if (this.cliente.dir.id == 0)
            {
                this.cliente.dir.Guardar(this.cliente.dir);
                return true;
            }
            else
            {
                this.cliente.dir.Modificar(this.cliente.dir);
                return true;
            }
        }

        private void CargarCliente()
        {
            //Datos Personales
            txtApellido.Text = this.cliente.Apellido;
            txtNombre.Text = this.cliente.Nombre;
            txtDni.Text = this.cliente.Documento.ToString();
            TipoDocumento doc = new TipoDocumento();
            cmbTipo.Text = doc.buscarTipoDocumento(this.cliente.tipo_doc);
            txtMail.Text = this.cliente.Mail;
            dateTimePicker1.Value = this.cliente.FechaNacimiento;
            //Dirección
            txtDireccion.Text = this.cliente.dir.domicilio;
            txtNro.Text = this.cliente.dir.nro.ToString();
            txtPiso.Text = this.cliente.dir.piso.ToString();
            txtDepto.Text = this.cliente.dir.depto;
            txtCodPostal.Text = this.cliente.dir.cp;
            txtLocalidad.Text = this.cliente.dir.localidad;
            txtCiudad.Text = this.cliente.dir.ciudad;
            //Telefono
            txtPais.Text = this.cliente.tel.cod_pais.ToString();
            txtArea.Text = this.cliente.tel.cod_area.ToString();
            txtTelefono.Text = this.cliente.tel.numero.ToString();
        }

        private void LLenarCliente() 
        {
            this.cliente.Apellido = txtApellido.Text;
            this.cliente.Nombre = txtNombre.Text;
            this.cliente.Documento = Int32.Parse(txtDni.Text);
            TipoDocumento doc=new TipoDocumento ();
            this.cliente.tipo_doc = doc.obtenerIdDocumento(cmbTipo.Text);
            this.cliente.Mail = txtMail.Text;
            // this.cliente.FechaNacimiento = DateTime.Parse(txtFechaDeNacimiento.Text);             
            // this.cliente.FechaNacimiento = Convert.ToDateTime(txtFechaDeNacimiento.Text);
            this.cliente.FechaNacimiento = dateTimePicker1.Value;
            //Direccion
            if (this.cliente.id ==0)
            {
                this.cliente.dir = new Direccion();                
            }            
            this.cliente.dir.domicilio = txtDireccion.Text;
            this.cliente.dir.nro= Convert.ToInt32(txtNro.Text);
            this.cliente.dir.piso=Convert.ToInt32(txtPiso.Text);
            this.cliente.dir.depto = txtDepto.Text;
            this.cliente.dir.cp = txtCodPostal.Text;
            this.cliente.dir.localidad = txtLocalidad.Text;
            this.cliente.dir.ciudad = txtCiudad.Text;
            //Telefono
            if (this.cliente.id == 0)
            { 
                this.cliente.tel=new Telefono();
            }
            this.cliente.tel.cod_pais = txtPais.Text;
            this.cliente.tel.cod_area = txtArea.Text;
            this.cliente.tel.numero = txtTelefono.Text;            
        }

        private void LimpiarCampos()
        {
            //Datos Personales
            txtApellido.Text = String.Empty;
            txtNombre.Text = String.Empty;
            txtDni.Text = String.Empty;
            cmbTipo.Text = String.Empty;
            txtMail.Text = String.Empty;
            //txtFechaDeNacimiento.Text = String.Empty;
            dateTimePicker1.Value = DateTime.Today;
            txtApellido.BackColor = Color.White;
            txtNombre.BackColor = Color.White;
            txtDni.BackColor = Color.White;
            cmbTipo.BackColor = Color.White;
            txtMail.BackColor = Color.White;
            dateTimePicker1.BackColor = Color.White;
            //Dirección
            txtDireccion.Text = String.Empty;
            txtNro.Text = String.Empty;
            txtPiso.Text = String.Empty;
            txtDepto.Text = String.Empty;
            txtCodPostal.Text = String.Empty;
            txtLocalidad.Text = String.Empty;
            txtCiudad.Text = String.Empty;
            txtDireccion.BackColor = Color.White;
            txtNro.BackColor = Color.White;
            txtPiso.BackColor = Color.White;
            txtDepto.BackColor = Color.White;
            txtCodPostal.BackColor = Color.White;
            txtLocalidad.BackColor = Color.White;
            txtCiudad.BackColor = Color.White;
            //Telefono
            txtPais.Text = String.Empty;
            txtArea.Text = String.Empty;
            txtTelefono.Text = String.Empty;
            txtPais.BackColor = Color.White;
            txtArea.BackColor = Color.White;
            txtTelefono.BackColor = Color.White;
        }

        private string ValidarCamposObligatorios() 
        {
            FuncionesComunes funciones= new FuncionesComunes();
            string mensaje, mensajeAmostrar = "";
            mensaje = funciones.verificarCampoVacio(txtApellido, "Apellido");
            txtApellido = funciones.colorearTextBox(txtApellido, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtNombre, "Nombre");
            txtNombre = funciones.colorearTextBox(txtNombre, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtDni, "Dni");
            txtDni = funciones.colorearTextBox(txtDni, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarComboVacio2(cmbTipo, "Tipo Documento");
            cmbTipo = funciones.colorearComboBox(cmbTipo, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtTelefono, "Telefono");
            txtTelefono = funciones.colorearTextBox(txtTelefono, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtArea, "Cod. Area");
            txtArea = funciones.colorearTextBox(txtArea, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtPais, "Cod. Pais");
            txtPais = funciones.colorearTextBox(txtPais, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtDireccion, "Calle");
            txtDireccion = funciones.colorearTextBox(txtDireccion, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtNro, "Nro");
            txtNro = funciones.colorearTextBox(txtNro, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtDepto, "Dpto");
            txtDepto = funciones.colorearTextBox(txtDepto, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtPiso, "Piso");
            txtPiso = funciones.colorearTextBox(txtPiso, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtCodPostal, "Codigo Postal");
            txtCodPostal = funciones.colorearTextBox(txtCodPostal, mensaje);
            mensajeAmostrar += mensaje;

            return mensajeAmostrar;
        }

        private void btnCancelar_Click(object sender, EventArgs e) 
        {
            this.Close();
        }

        private void txtNro_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressNumeros(e);
        }

        private void txtDepto_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressAlfanumerico(e);
        }

        private void txtCodPostal_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressAlfanumerico(e);
        }

        private void txtDni_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressNumeros(e);
        }

        private void txtNombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressLetras(e);
        }

        private void txtApellido_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressLetras(e);
        }

        private void txtPiso_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressNumeros(e);
        }

        private void lblLimpiarCampos_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            LimpiarCampos();
        }

        private void txtPais_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressNumeros(e);
        }

        private void txtArea_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressNumeros(e);
        }

        private void txtTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressNumeros(e);
        }      
    }
}
